package cn.patient.pp.module.patients.service;

import cn.patient.pp.framework.common.pojo.PageParam;
import cn.patient.pp.framework.common.pojo.PageResult;
import cn.patient.pp.module.patients.controller.admin.vo.*;
import cn.patient.pp.module.patients.controller.admin.vo.binscreen.BigScreenCheckPatient;
import cn.patient.pp.module.patients.controller.admin.vo.binscreen.SuspectedMentalDisorderVo;
import cn.patient.pp.module.system.dal.dataobject.dept.DeptDO;

import javax.validation.Valid;
import java.util.List;

public interface BigScreenService {
    /**
     * 获取风险比例
     *
     * @return 风险比例
     */
    RiskProportionRespVO getRiskProportion(BigScreenReqVO reqVO);

    List<Long> getDeptIds(Long inputDeptId);

    List<DeptDO> getDeptIdsByParentId(Long inputDeptId);

    /**
     * 获取风险类型比例
     *
     * @return 风险类型比例
     */
    List<RiskTypeProportionRespVO> getRiskTypeProportion(BigScreenReqVO reqVO);

    /**
     * 获取增加比例
     *
     * @return 增加比例
     */
    List<IncreaseProportionRespVO> getIncreaseProportion(BigScreenReqVO reqVO);

    /**
     * 获取高危患者
     *
     * @return 高危患者
     */
    List<HighRiskPatientsRespVO> getHighRiskPatients(BigScreenReqVO reqVO);

    /**
     * 获取随访趋势
     *
     * @return 随访趋势
     */
    List<FollowUpTrendsRespVO> getFollowUpTrends(BigScreenReqVO reqVO);

    /**
     * 报警
     *
     * @return 报警数据
     */
    PageResult<AlarmRespVO> getAlarm(AlarmReqVO reqVO);

    /**
     * 获取治愈率
     *
     * @return 治愈率
     */
    PageResult<CureRateRespVO> getCureRate(PageParam pageParam);
    /**
     * 新筛查鉴定统计
     *
     * @return 新筛查鉴定统计
     */
    BigScreenCheckPatient newPatientsCount(BigScreenReqVO reqVO);

    /**
     * 患者面访率
     *
     * @return 患者面访率
     */
    Double patientFaceVisitRate(@Valid BigScreenReqVO pageParam);

    /**
     * 患者电话访率
     *
     * @return 患者电话访率
     */
    List<LostContactCountRespVO> lostContactCount(@Valid BigScreenReqVO pageParam);
    /**
     * 疑似精神病障碍患者排查情况
     *
     * @return 疑似精神病障碍患者排查情况
     */
    SuspectedMentalDisorderVo suspectedMentalDisorder(@Valid BigScreenReqVO pageParam);

    /**
     * 发送短信提醒
     *
     * @param reqVOS 请求参数
     * @return 短信发送结果
     */
    String alarmMessage(@Valid List<AlarmMessageReqVO> reqVOS);

    /**
     * 新筛查鉴定报警信息
     *
     * @param reqVO 请求参数
     * @return 新筛查鉴定报警信息
     */
    PageResult<NewCheckAlarmRespVO> getNewCheckAlarm(@Valid NewCheckAlarmReqVO reqVO);

    /**
     * 危险程度变化报警信息
     *
     * @param reqVO 请求参数
     * @return 危险程度变化报警信息
     */
    PageResult<increaseAlarmVo> getIncreaseAlarm(@Valid NewCheckAlarmReqVO reqVO);
}
